package badanieGornejStrefy;
import java.awt.Point;

import typydanych.Obrazek;


public class BadanieSzerokosciICiaglosci {

	private static final int SZEROKA_I_CIAGLA = 1;
	private static final int WASKA_I_CIAGLA= 2;
	private static final int NIECIAGLA = 3;
	
	private int wysokoscPasuPrzeszukiwania;
	private int granicaSzerokosci;

	
	public BadanieSzerokosciICiaglosci() {
		wysokoscPasuPrzeszukiwania = 4;
		granicaSzerokosci = 10;
	}
	
	

	public BadanieSzerokosciICiaglosci(int wysokoscPasuPrzeszukiwania,
			int granicaSzerokosci) {
		super();
		this.wysokoscPasuPrzeszukiwania = wysokoscPasuPrzeszukiwania;
		this.granicaSzerokosci = granicaSzerokosci;
	}



	public int getWysokoscPasuPrzeszukiwania() {
		return wysokoscPasuPrzeszukiwania;
	}

	public void setWysokoscPasuPrzeszukiwania(int wysokoscPasuPrzeszukiwania) {
		this.wysokoscPasuPrzeszukiwania = wysokoscPasuPrzeszukiwania;
	}

	public int getGranicaSzerokosci() {
		return granicaSzerokosci;
	}

	public void setGranicaSzerokosci(int granicaSzerokosci) {
		this.granicaSzerokosci = granicaSzerokosci;
	}
	// ==============================================================================================
	
	public int rozpoznaj(Obrazek obrazek) {

		CharakterystykaSektoruObrazka charakterystyka = zbadajSzerokoscICiagloscObszaru(obrazek);
		//System.out.println(charakterystyka.getSzerokoscObiektu());
		if(charakterystyka.getSzerokoscObiektu() > granicaSzerokosci && charakterystyka.isCiaglosc()){
			return SZEROKA_I_CIAGLA;
		}else if(charakterystyka.getSzerokoscObiektu() < granicaSzerokosci && charakterystyka.isCiaglosc()){
			return WASKA_I_CIAGLA;
		}else {
			return NIECIAGLA;
		}
		
	}
	// ==============================================================================================
	private CharakterystykaSektoruObrazka zbadajSzerokoscICiagloscObszaru(Obrazek obrazek){
		
		boolean znalezionoPiksel = false;
		boolean ciaglosc = false;
		int licznikZmianFlagi = 0;
		int szerokosc = 0;
		int gornaGranica = obrazek.getObszarCyfry().getGora();
		int dolnaGranica = obrazek.getObszarCyfry().getGora()+wysokoscPasuPrzeszukiwania;
		
		kolumny:
		for (int x = 0; x < obrazek.ROZMIAR; x++) {
			for (int y = gornaGranica; y <= dolnaGranica; y++) {
				if(obrazek.get(x, y) > 0){	
					szerokosc++;
					if(!znalezionoPiksel){
						znalezionoPiksel = true;
						licznikZmianFlagi++;
					}
						
					continue kolumny;
				}
			}
			if(znalezionoPiksel){
				znalezionoPiksel = false;
				licznikZmianFlagi++;
			}
			
		}
		if(licznikZmianFlagi>2)
			ciaglosc = false;
		else 
			ciaglosc = true;
		
		return new CharakterystykaSektoruObrazka(szerokosc, ciaglosc);
		
	}
}
